home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-04
/
shazam11.zip
/
GENERAL.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-11-04
|
9KB
|
261 lines
{$X+}
UNIT General;INTERFACE USES Dos,Crt, { TP }
App,Dialogs,Views,Objects,StdDlg, { TV }
Drivers,Memory,MsgBox, { TV }
Buffers; { TV }
{===================================================================
Turbo Vision, General Purpose code.
Used with, but not part of, TurboVision objects.
===================================================================}
procedure heDosShell ; { EXEC }
procedure heCloseAll ; { Desktop }
procedure heZoomAll ; { Desktop }
procedure heTile ; { Desktop }
procedure heCascade ; { Desktop }
procedure heChangeDir ; { Desktop }
function ExecDialog ( P : PDialog ;
Data : pointer ) : word ; { General }
procedure heRefreshDisplay ; { Display }
procedure heColor ; { Palette }
procedure heBlackWhite ; { Palette }
procedure heMonochrome ; { Palette }
procedure PushScreen ; { General }
procedure PullScreen ; { General }
procedure PopScreen ; { General }
IMPLEMENTATION
{===================================================================
SHELL to DOS
===================================================================}
procedure heDosShell ;
var
UsingBuffers : boolean ;
begin
UsingBuffers := BufHeapEnd > 0 ;
DoneSysError ;
DoneEvents ;
DoneVideo ;
DoneMemory ;
PopScreen ;
if UsingBuffers then
SetMemTop ( Ptr ( BufHeapPtr , 0 ) )
else
SetMemTop ( HeapPtr ) ;
PrintStr ( 'Type ''EXIT'' to return...' ) ;
SwapVectors ;
Exec ( GetEnv ( 'COMSPEC' ) , '' ) ;
SwapVectors ;
if UsingBuffers then
SetMemTop ( Ptr ( BufHeapEnd , 0 ) )
else
SetMemTop ( HeapEnd ) ;
PushScreen ;
InitMemory ;
InitVideo ;
InitEvents ;
InitSysError ;
Application^.Redraw ;
if DosError <> 0 then
MessageBox ( 'Unable to SHELL to DOS' ,
NIL ,
mfError + mfOKbutton ) ;
end ;
{===================================================================
Executes a dialog box.
Returns
1. cmXXXX variable, usually cmCancel or cmOK
2. Data, a pointer to a data structure
===================================================================}
function ExecDialog ( P : PDialog ; Data : pointer ) : word ;
var
Result : word ;
begin
Result := cmCancel ;
P := PDialog ( Application^.ValidView ( P ) ) ;
if P <> NIL then
begin
if Data <> NIL then
P^.SetData ( Data^ ) ;
Result := DeskTop^.ExecView ( P ) ;
if ( Result <> cmCancel ) and
( Data <> NIL ) then
P^.GetData ( Data^ ) ;
Dispose ( P , Done ) ;
end ;
ExecDialog := Result ;
end ;
{-------------------------------------------------------------------
CLOSE ALL
-------------------------------------------------------------------}
procedure heCloseAll ;
procedure DoThis ( P : PView ) ; FAR ;
begin
Message ( P , evCommand , cmClose , NIL ) ;
end ;
begin
Desktop^.ForEach ( @DoThis ) ;
end ;
{-------------------------------------------------------------------
ZOOM ALL
-------------------------------------------------------------------}
procedure heZoomAll ;
procedure DoThis ( P : PView ) ; FAR ;
begin
Message ( P , evCommand , cmZoom , NIL ) ;
end ;
begin
Desktop^.ForEach ( @DoThis ) ;
end ;
{-------------------------------------------------------------------
"TILE" DeskTop windows
-------------------------------------------------------------------}
procedure heTile ;
var
R : TRect ;
begin
Desktop^.GetExtent ( R ) ;
Desktop^.Tile ( R ) ;
end ;
{-------------------------------------------------------------------
"CASCADE" DeskTop windows
-------------------------------------------------------------------}
procedure heCascade ;
var
R : TRect ;
begin
Desktop^.GetExtent ( R ) ;
Desktop^.Cascade ( R ) ;
end ;
{-------------------------------------------------------------------
CHANGE SUB-DIRECTORY
-------------------------------------------------------------------}
procedure heChangeDir ;
begin
ExecDialog ( New ( PChDirDialog ,
Init ( cdNormal , 0 ) ) , NIL ) ;
end ;
{===================================================================
DISPLAY: Redraw the screen
===================================================================}
procedure heRefreshDisplay ;
begin
DoneMemory ; { Dump cache buffers }
Application^.Redraw ; { Redisplay all }
end ;
{===================================================================
PALETTE
===================================================================}
{-------------------------------------------------------------------
COLOR
-------------------------------------------------------------------}
procedure heColor ;
begin
AppPalette := apColor ;
DoneMemory ;
Application^.Redraw ;
end ;
{-------------------------------------------------------------------
BW
-------------------------------------------------------------------}
procedure heBlackWhite ;
begin
AppPalette := apBlackWhite ;
DoneMemory ;
Application^.Redraw ;
end ;
{-------------------------------------------------------------------
MONO
-------------------------------------------------------------------}
procedure heMonochrome ;
begin
AppPalette := apMonochrome ;
DoneMemory ;
Application^.Redraw ;
end ;
{===================================================================
MONITOR TYPE
===================================================================}
function IsMono : boolean ;
var
CrtMode : byte Absolute $0040:$0049 ;
begin
IsMono := CrtMode = 7 ;
end ;
{===================================================================
VIDEO LOCATION
===================================================================}
function VideoMemory : LongInt ;
const
MonoScreen : word = $B000 ;
ColorScreen : word = $B800 ;
begin
if IsMono then
VideoMemory := MonoScreen
else
VideoMemory := ColorScreen ;
end ;
{===================================================================
SCREEN PUSH/POP
===================================================================}
{-------------------------------------------------------------------
DATA
-------------------------------------------------------------------}
const
SaveScreen : pointer = NIL ;
var
OldX ,
OldY : byte ;
{-------------------------------------------------------------------
SAVE
-------------------------------------------------------------------}
procedure PushScreen ;
begin
if SaveScreen <> NIL then EXIT ;
OldX := WhereX ;
OldY := WhereY ;
GetMem ( SaveScreen , 4000 ) ;
Move ( Mem [ VideoMemory : 0 ] , SaveScreen^ , 4000 ) ;
end ;
{-------------------------------------------------------------------
SHOW
-------------------------------------------------------------------}
procedure PullScreen ;
begin
if SaveScreen = NIL then EXIT ;
Move ( SaveScreen^, Mem [ VideoMemory : 0 ] , 4000 ) ;
GotoXY ( OldX , OldY ) ;
end ;
{-------------------------------------------------------------------
RESTORE
-------------------------------------------------------------------}
procedure PopScreen ;
begin
if SaveScreen = NIL then EXIT ;
PullScreen ;
FreeMem ( SaveScreen , 4000 ) ;
SaveScreen := NIL ;
end ;
{^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^}
END.